package com.ldy.core.util;

import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

/**
 * 获取客户端 IP
 */
public class IpUtil {
	// 正则表达式，用于验证IPv4地址
	private static final Pattern IPV4_PATTERN = Pattern.compile("^([0-9]{1,3}\\.){3}[0-9]{1,3}$");

	public static String getClientIp(HttpServletRequest request) {
		String xfHeader = request.getHeader("X-Forwarded-For");
		if (xfHeader != null && !xfHeader.isEmpty()) {
			// 分割字符串，限制为最多分割成2部分，以防输入字符串格式不正确导致数组越界
			String[] xfAddrs = xfHeader.split(",", 2);
			String firstAddr = xfAddrs[0].trim();
			// 验证是否是有效的IPv4地址
			if (IPV4_PATTERN.matcher(firstAddr).matches()) {
				return firstAddr;
			}
		}
		// 如果X-Forwarded-For头不存在、为空或第一个值不是有效的IPv4地址，则返回getRemoteAddr
		String remoteAddr = request.getRemoteAddr();
		// 这里可以添加额外的逻辑来处理remoteAddr，比如验证它是否是有效的IPv4地址
		return remoteAddr;
	}
}
